package gd.qaq.blue.bluespick.util;

import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static gd.qaq.blue.bluespick.util.StringUtil.colorFormat;

public class ItemUtil {
    public static ItemStack createItem(String id) {
        ItemStack stack = null;
        if (id.contains(":")) {
            stack = new ItemStack(Integer.parseInt(id.split(":")[0]), 1, Short.parseShort(id.split(":")[1]));
        } else {
            stack = new ItemStack(Integer.parseInt(id), 1);
        }
        return stack;
    }

    public static ItemStack createItem(String id, String displayName, String... lores) {
        ItemStack item = createItem(id);
        ItemMeta itemMeta = item.getItemMeta();
        itemMeta.setDisplayName(colorFormat(displayName));
        List<String> lore = new ArrayList<>();
        for (String string : lores) {
            lore.add(colorFormat(string));
        }
        itemMeta.setLore(lore);
        item.setItemMeta(itemMeta);
        return item;
    }

    public static boolean checkItemHasMeta(ItemStack item, String id, String displayName, String... lores) {
        Integer newId = Integer.valueOf(id.substring(0, (!id.contains(":") ? id.length() : id.indexOf(":"))));
        if (item.getTypeId() != newId) {
            return false;
        }
        if (!item.hasItemMeta()) {
            return false;
        }
        if (displayName == null && lores != null && lores.length > 0) {
            if (!item.getItemMeta().hasLore()) {
                return false;
            }
            List<String> lore = item.getItemMeta().getLore();
            if (lore.containsAll(Arrays.asList(lores))) {
                return true;
            }
        } else if (lores == null || lores.length == 0 && displayName != null) {
            if (!item.getItemMeta().hasDisplayName()) {
                return false;
            }
            if (item.getItemMeta().getDisplayName().equals(displayName)) {
                return true;
            }
        } else {
            if (!item.getItemMeta().hasLore()) {
                return false;
            }
            List<String> lore = item.getItemMeta().getLore();
            if (lore.containsAll(Arrays.asList(lores))) {
                if (!item.getItemMeta().hasDisplayName()) {
                    return false;
                }
                if (item.getItemMeta().getDisplayName().equals(displayName)) {
                    return true;
                }
            }
        }
        return false;
    }
}
